package utils

import (
	"TCP-sever/interface"
	"encoding/json"
	"fmt"
	"io/ioutil"
)

/*
	存储全局参数，供其他模块使用
	通过conf.json由用户配置
*/

type GlobalObj struct {
	/*
		Server
	*/
	TcpServer ZJX_interface.IServer //全局server对象
	Host      string                //IP地址
	Port      int                   //端口
	Name      string                //服务器名

	Version          string //版本号
	MaxConn          int    //服务器允许的最大连接数
	MaxPackageSize   uint32 //当前服务器数据包最大值
	WorkerPoolSize   uint32 //Worker工作池最大Gourtine数量
	MaxWorkerTaskLen uint32 //Worker队列的最大长度
}

/*
	定义一个全局的GlobalBoj
*/

var GlobalObject *GlobalObj

//初始化GlobalObj对象
func init() {

	//没有加载配置文件时的默认值
	GlobalObject = &GlobalObj{
		TcpServer:        nil,
		Host:             "0.0.0.0",
		Port:             8888,
		Name:             "Server",
		Version:          "V0.4",
		MaxConn:          1000,
		MaxPackageSize:   4096,
		WorkerPoolSize:   8,
		MaxWorkerTaskLen: 1024,
	}

	//加载配置文件
	GlobalObject.Reload()
}

func (G *GlobalObj) Reload() {
	data, err := ioutil.ReadFile("conf/conf.json")
	if err != nil {
		fmt.Println("Read file err,", err)
		panic(err.(interface{}))
	}
	err = json.Unmarshal(data, &GlobalObject)
	if err != nil {
		fmt.Println("Read file err,", err)
		panic(err.(interface{}))
	}
}
